//git信息类
#pragma once

#include <ncurses.h>
#include <dirent.h>    // POSIX 目录操作头文件
#include <sys/types.h> // 系统类型定义
#include <vector>
#include <string>

class GitInfo
{
private:
    // 窗口指针，用于显示Git信息
    WINDOW *win;
    // 当前目录路径
    std::string current_dir;
    // 存储目录下的文件/文件夹列表
    std::vector<std::string> items;
    // 滚动位置，用于处理显示内容超出窗口的情况
    int scroll_pos;
    // 标志位，是否显示提交信息输入框
    bool show_commit_input;
    // 存储用户输入的提交信息
    std::string commit_message;
    // 光标在提交信息中的位置
    int cursor_pos;
    // 标志位，输入框是否有焦点
    bool has_input_focus;
    // 输入框起始坐标Y
    int input_start_y;
    // 输入框起始坐标X
    int input_start_x;
    // 输入框行数
    int input_lines;

    // 计算光标在窗口中的实际位置
    void calculate_cursor_position(int &y, int &x);
    // 读取当前目录下的文件/文件夹
    void read_directory();
    // 绘制窗口内容
    void draw_window();

public:
    // 构造函数，初始化Git信息窗口
    // 参数：window - 要显示的窗口指针
    //       dir - 要显示的目录路径，默认为当前目录
    GitInfo(WINDOW *window, const std::string &dir = ".");
    // 重新初始化，用于切换目录时调用
    // 参数：new_dir - 新的目录路径
    void reinitialize(const std::string &new_dir);
    // 运行主逻辑，返回用户输入的提交信息
    std::string run();
};

